﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Acamps.Framework.BancoDados;
using Acamps.Framework.Util;
using Acamps.Web.NegocioWeb;

namespace Acamps.Web.Administrativo
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        AcessoWeb acessoWeb = new AcessoWeb();
        const string perfilGenerico = "#Perfil.EquipeGenerico";

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                CarregarCombos();
                contexto();
            }


            if (Session["login"] != null)
            {
                var logado = (LoginUser)Session["login"];
                if (logado.Perfil.Referencia.ToUpper() == perfilGenerico.ToUpper())
                {
                    btnSalvar.Visible = false;
                    btnLimpar.Visible = false;
                } 
            }
            else
            {
                Response.Redirect("../Default.aspx");
            }



        }

        private void contexto()
        {
            if(Request.QueryString["id"] != null)
            {
                hidAcampamento.Value = Request.QueryString["id"];
                Carregar();
            }
        }

        private void Carregar()
        {
            var evento = acessoWeb.AcampamentoNegocioWeb.RecuperarEvento(Guid.Parse(hidAcampamento.Value));

            txtDescricao.Text = evento.Descricao;
            txtDtInicio.Text = evento.DtInicio.Value.ToShortDateString();
            txtDataFinal.Text = evento.DtFim.Value.ToShortDateString();
            txtDtMaxima.Text = evento.DtMaxima.Value.ToShortDateString();
            txtHoraSaida.Text = evento.HoraSaida.Value.ToShortTimeString();
            txtHoraChegada.Text = evento.HoraChegada.Value.ToShortTimeString();
            txtContatos.Text = evento.Contatos;
            txtValor.Text = evento.Valor.Value.ToString();
            ckbAtivo.Checked = evento.Ativo.Value;
            ckbVigente.Checked = evento.Vigente.Value;
            ckbLiberarFichas.Checked = evento.LiberarFichas.Value;
            ddlTipoAcamps.SelectedValue = evento.IdTipoEventos.ToString();
            txtDeposito.Text = evento.DadosDeposito;
            txtLocalSaida.Text = evento.LocalSaida;
            txtFichas.Text = evento.ContatosFichas;
            ddlLocal.SelectedValue = evento.IdLocal.Value.ToString();

        }

        private void CarregarCombos()
        {
            var tipoEventos = acessoWeb.TipoAcampsNegocioWeb.ListarTipoEvento(true);

            Utilidades.SetaCombo(ddlTipoAcamps, tipoEventos, "Descricao", "Id");
            Utilidades.SetaCombo(ddlTipoAcampsFiltro, tipoEventos, "Descricao", "Id");
            Utilidades.SetaCombo(ddlLocal, acessoWeb.LocalNegocioWeb.ListarLocais(true), "Nome", "Id");

            rptDados.DataSource = acessoWeb.AcampamentoNegocioWeb.ListarAcampamentos(true);
            rptDados.DataBind();
            lblMensagem.Visible = rptDados.Items.Count == 0;

        }

        protected void btnSalvar_OnClick(object sender, EventArgs e)
        {
            string mensagemFinal = "";
            Evento evento;

            if (hidAcampamento.Value == string.Empty)
            {
                evento = new Evento();
                CarregarObjetos(evento);
                mensagemFinal = "Salvo";
            }
            else
            {
                evento = acessoWeb.AcampamentoNegocioWeb.RecuperarEvento(Guid.Parse(hidAcampamento.Value));

                if(evento == null)
                {
                    MensagemWeb.Show(new Mensagem("Não foi possivel encontrar o Acampamento para Edição", true, new Exception()), this.Master);
                }
                else
                {
                    CarregarObjetos(evento);
                    mensagemFinal = "Alterado";
                }
            }

            try
            {
                evento = acessoWeb.AcampamentoNegocioWeb.Salvar(evento);
                hidAcampamento.Value = evento.Id.ToString();
                MensagemWeb.Show(new Mensagem("Registro " + mensagemFinal + " com Sucesso.",false,null),this.Master);

                
            }
            catch (Exception ex)
            {
                MensagemWeb.Show(new Mensagem("O registro não pôde ser " + mensagemFinal,true,ex), this.Master);
            }
            rptDados.DataSource = acessoWeb.AcampamentoNegocioWeb.ListarAcampamentos(true);
            rptDados.DataBind();
            lblMensagem.Visible = rptDados.Items.Count == 0;
            Limpar();
        }

        private void Limpar()
        {
            txtDescricao.Text = "";
            txtDtInicio.Text = "";
            txtDataFinal.Text = "";
            txtDtMaxima.Text = "";
            txtHoraSaida.Text = "";
            txtHoraChegada.Text = "";
            txtContatos.Text = "";
            txtValor.Text = "";
            ckbAtivo.Checked = false;
            ckbVigente.Checked = false;
            ckbLiberarFichas.Checked = false;
            ddlTipoAcamps.SelectedValue = "";
            txtDeposito.Text = "";
            txtLocalSaida.Text = "";
            txtFichas.Text = "";
            ddlLocal.SelectedValue = "";
            hidAcampamento.Value = "";
        }

        private void CarregarObjetos(Evento evento)
        {
            evento.Descricao = txtDescricao.Text;
            evento.DtInicio = Convert.ToDateTime(txtDtInicio.Text);
            evento.DtFim = Convert.ToDateTime(txtDataFinal.Text);
            evento.DtMaxima = Convert.ToDateTime(txtDtMaxima.Text);
            evento.HoraSaida = Convert.ToDateTime(txtHoraSaida.Text);
            evento.HoraChegada = Convert.ToDateTime(txtHoraChegada.Text);
            evento.Contatos = txtContatos.Text;
            evento.Valor = Convert.ToDecimal(txtValor.Text);
            evento.Ativo = ckbAtivo.Checked;
            evento.Vigente = ckbVigente.Checked;
            evento.LiberarFichas = ckbLiberarFichas.Checked;
            evento.IdTipoEventos = Guid.Parse(ddlTipoAcamps.SelectedValue);
            evento.DadosDeposito = txtDeposito.Text;
            evento.LocalSaida = txtLocalSaida.Text;
            evento.ContatosFichas = txtFichas.Text;
            evento.IdLocal = Guid.Parse(ddlLocal.SelectedValue);
        }

        protected void btnLimpar_OnClick(object sender, EventArgs e)
        {
            Limpar();
        }
    }
}